// 请替换您下载的C++SDK路径

#include <unistd.h>
#include "baidu_asr.h" 
//#include "../baidu_asr_tts/speech/cpp/aip-cpp-sdk-0.8.4/speech.h"

//void ASR(aip::Speech* client);
//void ASR_url(aip::Speech* client);
//void TTS(aip::Speech* client);

int main(int argc, char* argv[])
{
	//调用snowboy热词检测
	while(1)
	{
		//调用snowboy热词检测 当前目录下demo
		int status = system("./demo");
		if(status == -1) 
			 std::cout << "./demo error" << std::endl;
		//在snowboy热词识别成功后会退出，执行到此处

		// 务必替换百度云控制台中新建百度语音应用的 Api Key 和 Secret Key
		aip::Speech * client = new aip::Speech("21204478", "4wBs10dsaScbHXX3ws4N8IiF", "rkZYZRRaYQ0kTOLCFrByTuf7ikZZrIP2");
		
		// 打印详细请求结果，可以打开查看详细请求内容
		client->setDebug(false);
		//调用alsa arecord命令进行2秒录音 16000采样率并保存为wav格式
		system("arecord -d 2 -f cd -r 16000 -c 1 record.wav");
		
		// 语音识别调用 极速版调用 返回识别结果
		std::string txt = ASR_PRO(client);
		std::cout << txt <<std::endl;

		//启动图灵机器人接口 python 脚本(包含TTS合成) 感觉有点慢 需要优化
		char cmd[256];
		sprintf(cmd,"python3 tuling.py %s",txt.data());
		status = system(cmd);
		if(status == -1) 
			std::cout << "tuling.py error" << std::endl;
		//执行到这里语音应答已经生成
		//sleep(1);
		//system("play question.mp3");
	}
    return 0;
}

/**
 * ASR语音识别示例
 */
std::string ASR(aip::Speech* client) {
    std::map<std::string, std::string> options;
    std::string file_content;
    aip::get_file_content("./record.wav", &file_content);
    Json::Value result = client->recognize(file_content, "wav", 16000, options);
    //std::cout << "语音识别本地文件结果:" << std::endl << result.toStyledString();
	//std::cout << result["result"][0] << std::endl;
	return result["result"][0].asString();
}

/**
 * ASR语音识别极速版示例
 */
std::string ASR_PRO(aip::Speech* client) {
    std::map<std::string, std::string> options;
    std::string file_content;
    aip::get_file_content("./record.wav", &file_content);
	//options["dev_pid"] = "1537";
    Json::Value result = client->recognize_pro(file_content, "wav", 16000, options);
    //std::cout << "语音识别极速版本地文件结果:" << std::endl << result.toStyledString();
	return result["result"][0].asString();
}

/**
 * TTS语音合成示例
 */
void TTS(aip::Speech* client,std::string txt) {
    std::ofstream ofile;
    std::string file_ret;
    std::map<std::string, std::string> options;
    options["spd"] = "5";
    options["per"] = "4";
    ofile.open("./tts.mp3", std::ios::out | std::ios::binary);
    Json::Value result = client->text2audio(txt, options, file_ret);
    // 如果file_ret为不为空则说明合成成功，返回mp3文件内容
    if (!file_ret.empty())
    {
        //合成成功保存文件
        ofile << file_ret;
        std::cout << "语音合成成功，打开目录下的tts.mp3文件听听看" << std::endl;
    } else {
        //合成出错，打印错误信息
        std::cout << result.toStyledString();
    }
}
